package leetcode.editor.cn;

//给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。 
// 注意：若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词。
//
// 示例 1: 
//输入: s = "anagram", t = "nagaram"
//输出: true
//
// 示例 2: 
//输入: s = "rat", t = "car"
//输出: false 
//
// 提示:
// 1 <= s.length, t.length <= 5 * 104
// s 和 t 仅包含小写字母 
// 
// 进阶: 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
// Related Topics 哈希表 字符串 排序 


import java.util.Arrays;

public class T242ValidAnagram {
    public static void main(String[] args) {
        Solution solution = new T242ValidAnagram().new Solution();


        System.out.println(solution.isAnagram("zlxhoinzgngi", "lihongxingzz"));

    }

    class Solution {

        // 可以维护一个长度为26的数组，从第一个到最后一个元素分别代表字母 a~z 的出现次数，
        // 然后计算第一个字符串中每个字母出现的次数，再计算第二个字符串中每个字母出现的次数，相减，最后数组元素之和等于0则返回true。
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
            int[] list = new int[26];
            for (char c : s.toLowerCase().toCharArray()) {
                list[c - 'a']++;
            }
            for (char c : t.toLowerCase().toCharArray()) {
                list[c - 'a']--;
            }
            for (int i : list) {
                if (i != 0) {
                    return false;
                }
            }
            return true;
        }


        // 排序，排序完成之后比较两个字符串是否相同
        public boolean isAnagram1(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
            char[] chars = s.toCharArray();
            char[] chars1 = t.toCharArray();
            Arrays.sort(chars);
            Arrays.sort(chars1);
            return String.valueOf(chars).equals(String.valueOf(chars1));
        }

    }

}